package com.bid.base.common.util.auth;

import com.alibaba.fastjson.JSONObject;
import com.bid.base.common.entity.CommonEnums;
import com.bid.base.common.response.ErrorCode;
import com.bid.base.common.util.JWTUtils;
import io.jsonwebtoken.Claims;
import lombok.extern.slf4j.Slf4j;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * <strong>Description : </strong> <br>
 * <p>
 * <strong>北京正源德标科技信息有限责任公司</strong> <br>
 * </p>
 * <br>
 *
 * @author : zhaots
 * @date Date : 2021年04月26日 15:47
 * 修改人 修改日期 修改描述<br>
 * -------------------------------------------<br>
 * <br>
 * <br>
 */
@Slf4j
public class TokenUtil {



    /**
     * 正常返回map， 异常返回null
     * @param token
     * @param jwtSecret
     * @return
     */
    public static Map obtainParamByToken(String token,String jwtSecret) {
        Claims claims = null;
        Map<String, String> dataMap = new HashMap<>(20);
        try {
            claims = JWTUtils.parseJWT(token, jwtSecret);
            String scope = claims.getIssuer();
            String userId = claims.getSubject();
            String userName = claims.get(CommonEnums.MdcKey.USER_NAME.getName()).toString();
            String deptId = claims.get(CommonEnums.MdcKey.DEPT_ID.getName()).toString();
            String subjectType = claims.get(CommonEnums.MdcKey.SUBJECT_TYPE.getName()).toString();
            dataMap.put(CommonEnums.MdcKey.USEID.getName(), userId);
            dataMap.put(CommonEnums.MdcKey.SCOPE.getName(), scope);
            dataMap.put(CommonEnums.MdcKey.USER_NAME.getName(), userName);
            dataMap.put(CommonEnums.MdcKey.DEPT_ID.getName(), deptId);
            dataMap.put(CommonEnums.MdcKey.SUBJECT_TYPE.getName(), subjectType);
            String expertId = claims.get(com.bid.base.common.entity.CommonEnums.MdcKey.EXPERT_ID.getName()).toString();
            dataMap.put(com.bid.base.common.entity.CommonEnums.MdcKey.EXPERT_ID.getName(), expertId);

            String legalId = claims.get(CommonEnums.MdcKey.LEGAL_ID.getName()).toString();
            dataMap.put(CommonEnums.MdcKey.LEGAL_ID.getName(), legalId);
            log.info("obtainParamByToken mdc的map为：{}", JSONObject.toJSON(dataMap));
        } catch (Exception e) {
            e.printStackTrace();
            log.error("获取异常,一般情况下是密钥不对 {}",jwtSecret);
            return null;
        }
        return dataMap;
    }
}
